using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BANSACH.BusinessLayer.DataLayer;
using BANSACH.BusinessLayer;
namespace BANSACH_GUI
{
    public partial class frmTblHOADONDetail : FormBase
    {
        public EventHandler OnAddOrEditEntity;
        private bool _isNew;
        private TblHOADONFactory objDao;
        private TblHOADON _Entity;
        private TblCHITIETHDFactory cthdDao;
        public TblHOADON Entity
        {
            get { return _Entity; }
            set { _Entity = value; }
        }
        public frmTblHOADONDetail()
        {
            InitializeComponent();
            _isNew = true;
            btnSave.Text = "Lưu && thêm mới";
            _Entity = null;
        }
        public frmTblHOADONDetail(TblHOADON EntityEdit)
        {
            InitializeComponent();
            _isNew = false;
            btnSave.Text = "Lưu";
            _Entity = EntityEdit;           
        }
        private void frmTblHOADONDetail_Load(object sender, EventArgs e)
        {
            // Khởi tạo đối tượng Business Logic Layer của
            // Hóa đơn và chi tiết hóa đơn
            objDao = new TblHOADONFactory();
            cthdDao = new TblCHITIETHDFactory();
            TblSACHFactory sachDao = new TblSACHFactory();
            DataTable data = sachDao.GetAll();
            c_Masach.DataSource = data;
            c_Masach.DisplayMember = "TenSach";
            c_Masach.ValueMember = "MaSach";
            // Hiển thị hóa đơn trong trường hợp sửa
            if (_Entity != null)
                ViewEntity();
            else
                _Entity = new TblHOADON();
        }
        private List<TblCHITIETHD> GetChitietHD()
        {
            grvData.EndEdit();
            List<TblCHITIETHD> ctEnties = new List<TblCHITIETHD>();
            TblCHITIETHD ctentity;
            string cellvalue;
            int intvalue;
            for (int i = 0; i < grvData.Rows.Count-1; i++)
            {
                ctentity = new TblCHITIETHD();
                // Mã hóa đơn, mã sách                
                ctentity.MaSach = grvData["c_Masach", i].Value.ToString();
                // Số lượng
                cellvalue = grvData["c_Soluong", i].Value.ToString();
                if (int.TryParse(cellvalue, out intvalue))
                    ctentity.SoLuong = intvalue;
                // Đơn giá
                cellvalue = grvData["c_Dongia", i].Value.ToString();
                if (int.TryParse(cellvalue, out intvalue))
                    ctentity.DonGia = intvalue;                
                // Thêm vào danh sách
                ctEnties.Add(ctentity);
            }
            return ctEnties;
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            // Tạo thực thể hóa đơn
            SetEntityValue();
            // Tạo danh sách các chi tiết hóa đơn do người dùng nhập vào trên Grid
            List<TblCHITIETHD> ctEntities = GetChitietHD();
            int i;
            if (_isNew) // Tạo mới hóa đơn
            {
                if (objDao.Insert(_Entity))
                {
                    if (OnAddOrEditEntity != null) OnAddOrEditEntity(_Entity, e);
                    for (i = 0; i < ctEntities.Count; i++)
                    {
                        ctEntities[i].MaHD = _Entity.MaHD;
                        cthdDao.Insert(ctEntities[i]);
                    }
                    NewItem();
                }
            }
            else
            {
                if (objDao.Update(_Entity))
                {
                    if (OnAddOrEditEntity != null) OnAddOrEditEntity(_Entity, e);
                    // Xóa các chi tiết của hóa đơn
                    cthdDao.Delete(TblCHITIETHD.TblCHITIETHDFields.MaHD, _Entity.MaHD);
                    // Thêm chi tiết
                    for (i = 0; i < ctEntities.Count; i++)
                    {
                        ctEntities[i].MaHD = _Entity.MaHD;
                        cthdDao.Insert(ctEntities[i]);
                    }
                    this.Close();
                }
            }
        }
        private void NewItem()
        {             
			 txt_MaHD.Text ="";
			 txt_Hoten.Text ="";
			 txt_DiaChi.Text ="";
			 txt_DienThoai.Text ="";
			 txt_GhiChu.Text ="";
             grvData.Rows.Clear();
        }
        private void ViewEntity()
        {             
			 txt_MaHD.Text = _Entity.MaHD;
			 date_NgayHD.Value = _Entity.NgayHD.Value;
			 txt_Hoten.Text = _Entity.Hoten;
			 txt_DiaChi.Text = _Entity.DiaChi;
			 txt_DienThoai.Text = _Entity.DienThoai;
			 txt_GhiChu.Text = _Entity.GhiChu;
            // Lấy và hiển thị chi tiết hóa đơn
             DataTable dtChitiet = cthdDao.GetAllByHoadon(_Entity.MaHD);
             grvData.DataSource = dtChitiet;
        }
        private void SetEntityValue()
        {
            
			 _Entity.MaHD=txt_MaHD.Text;
			 _Entity.NgayHD=date_NgayHD.Value;
			 _Entity.Hoten=txt_Hoten.Text;
			 _Entity.DiaChi=txt_DiaChi.Text;
			 _Entity.DienThoai=txt_DienThoai.Text;
			 _Entity.GhiChu=txt_GhiChu.Text;
        }
        private void btnExit_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {

        }       
    }
}
